#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
飞书数据上传主入口：从飞书多维表获取数据并上传到MySQL数据库
"""
import sys
import argparse
from pathlib import Path

# 添加项目根目录到 Python 路径
project_root = Path(__file__).parent
sys.path.append(str(project_root))

from utils.logger import sync_logger
from utils.db_utils import Database
from services.feishu_table_service import FeishuTableService
from config.db_config import FEISHU_DB_CONFIG
from config.feishu_config import (
    FEISHU_TABLE_URLS, 
    parse_feishu_url, 
    get_table_name,
    get_api_table_name_mapping
)
from services.feishu_service import FeishuService

def drop_tables():
    """删除所有已存在的表，以便重新创建"""
    db = Database(host=FEISHU_DB_CONFIG['host'], 
                 port=FEISHU_DB_CONFIG['port'], 
                 user=FEISHU_DB_CONFIG['user'], 
                 password=FEISHU_DB_CONFIG['password'], 
                 database=FEISHU_DB_CONFIG['database'])
    db.connect()
    # 记录处理结果
    success_count = 0
    fail_count = 0
    total_count = len(FEISHU_TABLE_URLS)
    
    sync_logger.log_info(f"准备处理飞书表格配置，共 {total_count} 张表")
    
    try:
        # 首先尝试获取表格名称映射，使用一次调用API获取所有表格名称
        table_mapping = get_api_table_name_mapping(force_refresh=True)
        sync_logger.log_info(f"成功获取表格名称映射，共 {len(table_mapping)} 张表")
        
        for url in FEISHU_TABLE_URLS:
            try:
                sync_logger.log_info(f"处理URL: {url}")
                config = parse_feishu_url(url)
                app_token = config['app_token']
                table_id = config['table_id']
                
                # 使用新的表格名称获取函数
                table_name = get_table_name(table_id)
                
                # 处理表格名称
                if not table_name:
                    table_name = f"feishu_{table_id}"
                    sync_logger.log_warning(f"表格 {table_id} 没有表格名称，使用默认名称: {table_name}")
                
                # 处理表格名称，移除特殊字符，只保留中文、英文、数字和下划线
                import re
                table_name = re.sub(r'[^\w\u4e00-\u9fff]', '_', table_name)
                # 确保表格名称以字母开头（MySQL要求）
                if not table_name[0].isalpha():
                    table_name = f"t_{table_name}"
                    sync_logger.log_info(f"表格名称添加 t_ 前缀: {table_name}")
                
                try:
                    # 删除表格
                    drop_sql = f"DROP TABLE IF EXISTS `{table_name}`"
                    sync_logger.log_info(f"执行: {drop_sql}")
                    db.execute_update(drop_sql)
                    sync_logger.log_info(f"表格 {table_name} 已删除")
                    success_count += 1
                except Exception as e:
                    sync_logger.log_error(f"删除表格 {table_name} 失败: {str(e)}")
                    fail_count += 1
                    continue
            except Exception as e:
                sync_logger.log_error(f"处理URL {url} 失败: {str(e)}")
                fail_count += 1
                continue
    except Exception as e:
        sync_logger.log_error(f"删除表格失败: {str(e)}")
    finally:
        db.disconnect()
        sync_logger.log_info(f"表格配置处理完成: 成功 {success_count} 张, 失败 {fail_count} 张, 总共 {total_count} 张")
def main():
    parser = argparse.ArgumentParser(description='飞书数据上传工具')
    parser.add_argument('--no-reset', action='store_true', help='跳过删除表格操作，直接上传数据')
    args = parser.parse_args()

    # 默认删除表格，除非指定了--no-reset参数
    if not args.no_reset:
        sync_logger.log_info("开始删除已存在的表格...")
        drop_tables()
    else:
        sync_logger.log_info("跳过删除表格操作，直接上传数据")

    try:
        service = FeishuTableService(db_config=FEISHU_DB_CONFIG)
        with sync_logger.start_timer("飞书数据上传"):
            service.process_all_tables()
        sync_logger.log_info("飞书数据上传完成")
        return 0
    except Exception as e:
        sync_logger.log_error(f"飞书数据上传失败: {str(e)}")
        return 1
if __name__ == "__main__":
    sys.exit(main()) 